Le moniteur permet de modifier certains paramètres de la machine virtuelle et d'en inspecter l'état. Certaines de ses commandes sont plutôt destinées aux développeurs ; nous ne les aborderons pas, pour nous concentrer sur les plus utiles.
L'entrée dans le mode moniteur se fait en appuyant sur les touches Ctrl-Alt-2. Pour revenir à l'écran principal de QEmu, il faut appuyer sur les touches Ctrl-Alt-1.
Remarque : lorsqu'on entre dans le moniteur, la première touche tapée au clavier n'est pas prise en compte... Suivant le SE cible, lorsqu'on revient à l'écran principal, un ou plusieurs caractères parasites peuvent êtres transmis (souvent le 1 ou &).
En tapant help, ou ? dans le moniteur, on obtient la liste des commandes disponibles.
Help|? show
the help
commit commit
changes to the disk images (if -snapshot is used)
info
subcommand show
various information about the system
state
q|quit quit
the emulator
eject [-f] device eject
a removable media (use -f to force it)
change device
filename change a removable media
screendump filename save
screen into PPM image 'filename'
log item1[,...] activate
logging of the specified items to '/tmp/qemu.log'
savevm
[tag|id] save a VM
snapshot. If no tag or id are provided, a new snapshot is
created
loadvm tag|id restore
a VM snapshot from its tag or id
delvm tag|id delete
a VM snapshot from its tag or id
stop stop
emulation
c|cont resume
emulation
gdbserver [port] start
gdbserver session (default port=1234)
x /fmt
addr virtual
memory dump starting at 'addr'
xp /fmt addr physical
memory dump starting at 'addr'
p|print /fmt expr print expression
value (use $reg for CPU register access)
i /fmt
addr I/O
port read
sendkey keys send
keys to the VM (e.g. 'sendkey
ctrl-alt-f1')
system_reset reset
the system
system_powerdown send
system power down event
sum addr size compute
the checksum of a memory region
usb_add device add
USB device (e.g. 'host:bus.addr' or
'host:vendor_id:product_id')
usb_del device remove
USB device 'bus.addr
cpu index set
the default CPU
Certaines commandes, comme la commande info, ont encore des sous-commandes.
La commande info admet les sous-commandes suivantes :
version Affiche le numéro de version de QEmu
network Affiche des informations sur le réseau dans QEmu.
(qemu) info
network
VLAN 0 devices:
user redirector
ne2000
pci macaddr=52:54:00:12:34:56
block Affiche des informations sur les disques virtuels
(qemu) info
block
cdrom: type=cdrom removable=1 locked=0 [not
inserted]
hda: type=hd removable=0 file=<NomImage>
backing_file=<NomImageBase> ro=0 drv=qcow2
hdb:
type=hd removable=0 file=<NomImage> ro=0 drv=qcow2
fda:
type=floppy removable=1 locked=0 file=//./A: ro=0 drv=raw
registers Affiche les registres du processeur virtuel.
cpus Affiche des informations sur chaque processeur virtuel.
history Affiche l'historique des commandes tapées dans le moniteur.
irq Affiche des statistiques sur les requêtes IRQ (si disponible).
pic Affiche des informations sur le PIC i8259.
pci Affiche des informations sur le bus PCI de la machine virtuelle.
tlb Affiche des informations sur les correspondances mémoire virtuelle vers physique.
mem Informations sur la mémoire virtuelle.
jit Affiche les statistiques du compilateur dynamique.
kqemu Affiche l'état du module accélérateur (kqemu) :
(qemu) info
kqemu
kqemu support: enabled for user and kernel code
usb Liste les périphériques USB de la machine virtuelle :
(qemu) info
usb
Device 0.2, Speed 12 Mb/s, Product QEMU USB Tablet
usbhost Liste les périphériques USB de l'hôte. Ne fonctionne que si un filtre USB est installé sur l'hôte (Windows) et nécessite également une version patchée de QEmu.
snapshot affiche des informations sur les instantanés enregistrés dans les images diques.
Nous l'avons déjà vu auparavant, changer un périphérique de stockage virtuel se fait avec la commande change.
change device filename.
device représente le lecteur virtuel concerné : fda ou fdb pour les lecteurs de disquettes, cdrom pour le lecteur de CD. Les disques durs ne sont pas amovibles...
filename est le chemin d'accès complet (nom du fichier inclus) du fichier image de disquette ou de CD/DVD. L'accès à un périphérique physique est possible avec la syntaxe \\.\X: ou //./X: (X représentant la lettre du lecteur physique).
La commande eject [-f] device permet d'éjecter le média du lecteur virtuel. device peut prendre les mêmes valeurs que pour la commande change. L'option -f permet de forcer l'éjection du média, même si le SE cible verrouille le lecteur (Linux, par exemple).
De même que l'hôte possède un bouton RESET, la machine virtuelle peut être redémarrée à l'aide de la commande system_reset. Cette commande n'a pas de paramètre.
La machine virtuelle peut être suspendue avec la commande stop. Vivement recommandé avant de sauvegarder l'état de la machine virtuelle, par exemple. c ou cont permet de reprendre l'exécution normale.
q ou quit permet d'éteindre sauvagement la machine virtuelle. Ça revient à débrancher la prise secteur d'un hôte... Dans la mesure du possible, il est préférable d'arrêter QEmu par l'intermédiaire du SE cible.
QEmu reconnaît les valeurs suivantes pour le paramètre device : mouse, tablet et disk. Ces mêmes valeurs peuvent être utilisées sur la ligne de commande de QEmu avec l'option -usbdevice. La ligne de commande de QEmu semble n'accepter qu'un seul paramètre -usbdevice. Les autres périphériques à connecter devront l'être par l'intermédiaire du moniteur.
La commande usb_add device permet de brancher un périphérique USB virtuel.
Pour brancher une souris USB à la machine virtuelle, tapez : usb_add mouse. Cette souris remplacera la souris PS/2 par défaut.
Pour brancher une tablette USB à la machine virtuelle, tapez : usb_add tablet. La tablette USB permet surtout de s'affranchir de la capture du pointeur de la souris. Elle remplace la souris PS/2.
Il est aussi possible de monter un fichier image comme disque USB, avec l'option disk:. La commande usb_add disk:C:\QEMU\IMAGES\<Image.img> provoquera l'apparition d'un nouveau disque amovible USB. Ce disque pourra être déconnecté (usb_del x.y) et reconnecté comme n'importe quel périphérique USB (usb_add). Ce périphérique est accessible en lecture et en écriture.
(qemu) info usb
Device 0.2,
Speed 12 Mb/s, Product QEMU USB MSD(C:\QEMU\IMAGES\<Image.img>)
La commande usb_del bus.adresse permet de retirer un périphérique. bus.adresse vous sera fourni par la commande info usb (voir un peu plus haut).
La commande sendkey permet d'envoyer des séquences de touches à la machine virtuelle. Plusieurs touches peuvent être combinée en les séparant par un tiret : sendkey ctrl-alt-delete permet d'envoyer Control-Alt-Suppr à la machine virtuelle, séquence normalement interceptée par Windows si elle est tapée sur le clavier de l'hôte. sendkey 0x1d-0x38-0xd3 donnerait le même résultat.
Attention toutefois si vous envoyez des codes de caractères imprimables (lettres, chiffres, etc...) : ils sont interprétés comme venant d'un clavier américain (0x1e affichera q dans le SE cible). De plus, des caractères parasites sont insérés... Cette commande est surtout utile pour les séquences de touches qui sont interceptées par l'hôte. Vous trouverez en annexe la liste des codes reconnus par la commande (paragraphe 9.1, page 36).
A partir de la version 0.8.2, la commande savevm change : les instantanés ne sont plus enregistrés dans un fichier séparé, mais directement dans une image disque (en général, la première correspondant aux critères ci-dessous), qui doit obligatoirement être au format qcow2 (le format qcow ne prend pas en charge cette fonctionnalité). Ceci implique d'avoir au moins une image disque au format qcow2, qui ne soit pas amovible et accessible en écriture.
L'intérêt de cette approche est de pouvoir suivre les modifications apportées aux disques virtuels, ce qui n'était pas envisageable lorsque l'état était enregistré dans un fichier séparé.
Un instantané mémorise l'état complet d'une machine virtuelle : état du processeur, mémoire vive, état des périphériques et modifications (écritures) faites sur les disques virtuels. Il est alors possible de photographier la machine virtuelle et de revenir a un état précédent : le PC virtuel possède une option Edition/Annuler !
Pour créer un instantané, utilisez la commande savevm [tag|id]. tag représente un nom que vous attribuez à la sauvegarde. id est un numéro que QEmu attribue à la sauvegarde. Cette information est facultative.
Si tag ou id est fourni, et qu'un instantané porte déjà cet identifiant, il est écrasé. Sinon, un nouvel instantané est créé.
Les commandes loadvm tag|id et delvm tag|id sont les compléments évidents de la commande savevm, permettant de rappeler un état enregistré, ou de le supprimer.
La commande info snapshots permet de connaître la liste des instantanés :
(qemu) info snapshots
Snapshot devices:
hda
Snapshot list (from hda):
ID TAG VM
SIZE DATE VM
CLOCK
1 SAVE1 45M aaaa-mm-jj
hh:mm:ss hh:mm:ss.mmm
Remarque : il ne faut pas confondre les instantanés avec la notion d'image de base. Un instantané mémorise l'état complet de la machine virtuelle, alors qu'une image disque basée sur une autre n'enregistre que les modifications de ce disque virtuel.
Les commandes restantes sont plutôt utilisées pour le développement. Elles permettent d'examiner la mémoire ou les ports d'entrées/sorties et ne sont pas très importantes pour une utilisation normale.
On peut citer rapidement la commande commit, qui est utile si QEmu a été démarré avec l'option snapshot. Cette option transfère toutes les écritures qui ont été faites sur l'image de disque temporaire vers l'image de base.